//src/utils/request.js
import axios from 'axios'
// import store from "../store/index"
//  绕了一圈 获取缓慢 有bug  登录第一次登陆不上
// const token = store.getState().getIn(['user','token'])


// 环境
// 开发环境 development  yarn start
// 生产环境 production   yarn build
const isDev = process.env.NODE_ENV === 'development'

const ins = axios.create({
  baseURL: isDev ? 'http://121.89.205.189:3001/admin' : 'http://121.89.205.189:3001/admin',
  timeout: 6000
})

// 拦截器
ins.interceptors.request.use(config => {
  // console.log(config);

  // 绕了一圈 获取缓慢 有bug  登录第一次登陆不上
  // config.headers['token'] = token
  // 直接从本地存储获取  在登录请求的一瞬间本地就已经存储上了
  config.headers['token'] = localStorage.getItem('token')
  
  return config
}, error => Promise.reject(error))

ins.interceptors.response.use(response => {

  // 请求需要token验证的数据时 如果没token 直接打回登录页 
  if (  response.data.code === '10119' ) { // token无效字段
    
    window.location.href="/#/login"
    return response
  }

  return response
}, error => Promise.reject(error))

// export default ins
// 自定义各种数据请求 axios({})
export default function request (config) {
  const { url = '', method = 'GET', data = {}, headers = {} } = config
  switch (method.toUpperCase()) {
    case 'GET':
      return ins.get(url, { params: data })
    case 'POST':
      // 表单提交  application/x-www-form-url-encoded
      if (headers['content-type'] === 'application/x-www-form-url-encoded') {
        // 转参数 URLSearchParams/第三方库qs
        const p = new URLSearchParams()
        for (const key in data) {
          p.append(key, data[key])
        }
        return ins.post(url, p, { headers })
      }
      // 文件提交  multipart/form-data
      if (headers['content-type'] === 'multipart/form-data') {
        const p = new FormData()
        for (const key in data) {
          p.append(key, data[key])
        }
        return ins.post(url, p, { headers })
      }
      // 默认 application/json
      return ins.post(url, data)
    case 'PUT': // 修改数据 --- 所有的数据的更新
      return ins.put(url, data)
    case 'DELETE': // 删除数据
      return ins.delete(url, { data })
    case 'PATCH': // 更新局部资源
      return ins.patch(url, data)
    default:
      return ins(config)
  }
}